X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Futil.cpp;h=c178d90a99905b029748e691f0655d6fa83c2b3b;hb=refs%2Ftags%2F5.0.0;hp=482003e235230dda5c911c7f3a54838fb1b20c5b;hpb=e86177d7a54d8c2c0e096fd856e64bb9671267a4;p=staging%2Fwindowmanager.git diff --git a/src/util.cpp b/src/util.cpp index 482003e..c178d90 100644 --- a/src/util.cpp +++ b/src/util.cpp @@ -1,3 +1,19 @@ +/* + * Copyright (C) 2017 Mentor Graphics Development (Deutschland) GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + #include "util.hpp" #include @@ -8,86 +24,14 @@ #include -struct strftime_cache { - time_t time; - char buf[128]; -}; - -static void log_(char const *log_type, FILE *stream, char const *fmt, - va_list args) { - static struct strftime_cache strft; - - time_t t = time(nullptr); - if (t != strft.time) { - strft.time = t; - struct tm tm; - struct tm *tmp = localtime_r(&t, &tm); - strftime(strft.buf, sizeof(strft.buf), "%Y-%m-%dT%H:%M:%S", tmp); - } - - fputs(program_invocation_short_name, stream); - fputs(" ", stream); - fputs(strft.buf, stream); - fputs(" ", stream); - fputs(log_type, stream); - fputs(" ", stream); - vfprintf(stream, fmt, args); - fputs("\n", stream); -} - -void lognotice(char const *fmt, ...) { - va_list a; - va_start(a, fmt); - log_("notice", stdout, fmt, a); - va_end(a); -} - -void logerror(char const *fmt, ...) { - va_list a; - va_start(a, fmt); - log_("error", stderr, fmt, a); - va_end(a); -} - -void fatal(char const *fmt, ...) { - va_list a; - va_start(a, fmt); - log_("fatal", stderr, fmt, a); - va_end(a); - abort(); -} - -#ifdef DEBUG_OUTPUT -void logdebug(char const *fmt, ...) { - va_list a; - va_start(a, fmt); - log_("debug", stdout, fmt, a); - va_end(a); +#ifdef SCOPE_TRACING +thread_local int ScopeTrace::indent = 0; +ScopeTrace::ScopeTrace(char const *func) : f(func) { + fprintf(stderr, "%lu %*s%s -->\n", pthread_self(), 2 * indent++, "", this->f); } +ScopeTrace::~ScopeTrace() { fprintf(stderr, "%lu %*s%s <--\n", pthread_self(), 2 * --indent, "", this->f); } #endif -void Poller::add_fd(int fd, std::function handler) { - pfds.emplace_back(pollfd{.fd = fd, .events = POLLIN, .revents = 0}); - handlers.emplace_back(std::move(handler)); -} - -int Poller::check_events() { - int ret = 0; - if ((ret = poll(this->pfds.data(), this->pfds.size(), -1)) != -1 && - errno != EINTR) { - for (unsigned i = 0; i < pfds.size(); i++) { - if ((pfds[i].revents & POLLIN) != 0) { - if (handlers[i](pfds[i].fd) == -1) { - return -1; - } - pfds[i].revents = 0; - pfds[i].events = POLLIN; - } - } - } - return ret; -} - unique_fd::~unique_fd() { if (this->fd != -1) { close(this->fd);