summaryrefslogtreecommitdiffstats
path: root/lldb/tools/debugserver/source/MacOSX/DarwinLog/LogMessageOsLog.cpp
blob: f3b6e4439181d5942cd296ee6ce58db535967392 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
//===-- LogMessageOsLog.cpp -------------------------------------*- C++ -*-===//
//
//                     The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#include "LogMessageOsLog.h"

#include "ActivityStore.h"
#include "ActivityStreamSPI.h"

namespace
{
    static os_log_copy_formatted_message_t s_log_copy_formatted_message;
}

void
LogMessageOsLog::SetFormatterFunction(os_log_copy_formatted_message_t
                                      format_func)
{
    s_log_copy_formatted_message = format_func;
}

LogMessageOsLog::LogMessageOsLog(const ActivityStore &activity_store,
                                 ActivityStreamEntry &entry) :
    LogMessage(),
    m_activity_store(activity_store),
    m_entry(entry),
    m_message()
{
}

bool
LogMessageOsLog::HasActivity() const
{
    return m_entry.activity_id != 0;
}

const char*
LogMessageOsLog::GetActivity() const
{
    return m_activity_store.GetActivityForID(m_entry.activity_id);
}

std::string
LogMessageOsLog::GetActivityChain() const
{
    return m_activity_store.GetActivityChainForID(m_entry.activity_id);
}

bool
LogMessageOsLog::HasCategory() const
{
    return m_entry.log_message.category &&
        (m_entry.log_message.category[0] != 0);
}

const char*
LogMessageOsLog::GetCategory() const
{
    return m_entry.log_message.category;
}

bool
LogMessageOsLog::HasSubsystem() const
{
    return m_entry.log_message.subsystem &&
        (m_entry.log_message.subsystem[0] != 0);
}

const char*
LogMessageOsLog::GetSubsystem() const
{
    return m_entry.log_message.subsystem;
}

const char*
LogMessageOsLog::GetMessage() const
{
    if (m_message.empty())
    {
        std::unique_ptr<char[]> formatted_message(
                            s_log_copy_formatted_message(&m_entry.log_message));
        if (formatted_message)
            m_message = formatted_message.get();
        // else
        //     TODO log
    }

    // This is safe to return as we're not modifying it once we've formatted it.
    return m_message.c_str();
}
OpenPOWER on IntegriCloud