Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Kernel Liteos A
提交
d6323564
K
Kernel Liteos A
项目概览
OpenHarmony
/
Kernel Liteos A
1 年多 前同步成功
通知
460
Star
414
Fork
55
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
4
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel Liteos A
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
4
Issue
4
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d6323564
编写于
5月 18, 2021
作者:
O
openharmony_ci
提交者:
Gitee
5月 18, 2021
浏览文件
操作
浏览文件
下载
差异文件
!206 fix time mould-kernel:fix 2 api clock_gettime、clock_getres
Merge pull request !206 from guweijie/master
上级
e7c0c517
2534c86d
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
212 addition
and
3 deletion
+212
-3
compat/posix/src/time.c
compat/posix/src/time.c
+124
-2
testsuites/unittest/posix/pthread/posix_pthread_test.cpp
testsuites/unittest/posix/pthread/posix_pthread_test.cpp
+11
-0
testsuites/unittest/process/mutex/process_mutex_test.cpp
testsuites/unittest/process/mutex/process_mutex_test.cpp
+33
-0
testsuites/unittest/time/clock/time_clock_test.cpp
testsuites/unittest/time/clock/time_clock_test.cpp
+22
-0
testsuites/unittest/time/timer/time_timer_test.cpp
testsuites/unittest/time/timer/time_timer_test.cpp
+22
-1
未找到文件。
compat/posix/src/time.c
浏览文件 @
d6323564
...
...
@@ -50,6 +50,8 @@
#include "los_swtmr_pri.h"
#include "los_sys_pri.h"
#define CPUCLOCK_PERTHREAD_MASK 4
#define CPUCLOCK_ID_OFFSET 3
/*
* Do a time package defined return. This requires the error code
...
...
@@ -450,13 +452,82 @@ int clock_settime(clockid_t clockID, const struct timespec *tp)
return
settimeofday
(
&
tv
,
NULL
);
}
static
int
PthreadGetCputime
(
clockid_t
clockID
,
struct
timespec
*
ats
)
{
uint64_t
runtime
;
UINT32
intSave
;
UINT32
tid
=
((
UINT32
)
~
((
clockID
)
>>
CPUCLOCK_ID_OFFSET
));
if
(
OS_TID_CHECK_INVALID
(
tid
))
{
return
-
ESRCH
;
}
LosTaskCB
*
task
=
OsGetTaskCB
(
tid
);
if
(
OsCurrTaskGet
()
->
processID
!=
task
->
processID
)
{
return
-
EINVAL
;
}
SCHEDULER_LOCK
(
intSave
);
runtime
=
task
->
taskCpup
.
allTime
;
SCHEDULER_UNLOCK
(
intSave
);
ats
->
tv_sec
=
runtime
/
OS_SYS_NS_PER_SECOND
;
ats
->
tv_nsec
=
runtime
%
OS_SYS_NS_PER_SECOND
;
return
0
;
}
static
int
ProcessGetCputime
(
clockid_t
clockID
,
struct
timespec
*
ats
)
{
UINT64
runtime
;
UINT32
intSave
;
const
pid_t
pid
=
((
pid_t
)
~
((
clockID
)
>>
CPUCLOCK_ID_OFFSET
));
LosProcessCB
*
spcb
=
NULL
;
if
(
OsProcessIDUserCheckInvalid
(
pid
)
||
pid
<
0
)
{
return
-
EINVAL
;
}
spcb
=
OS_PCB_FROM_PID
(
pid
);
if
(
OsProcessIsUnused
(
spcb
))
{
return
-
EINVAL
;
}
SCHEDULER_LOCK
(
intSave
);
runtime
=
spcb
->
processCpup
.
allTime
;
SCHEDULER_UNLOCK
(
intSave
);
ats
->
tv_sec
=
runtime
/
OS_SYS_NS_PER_SECOND
;
ats
->
tv_nsec
=
runtime
%
OS_SYS_NS_PER_SECOND
;
return
0
;
}
static
int
GetCputime
(
clockid_t
clockID
,
struct
timespec
*
tp
)
{
int
ret
;
if
(
clockID
>=
0
)
{
return
-
EINVAL
;
}
if
((
UINT32
)
clockID
&
CPUCLOCK_PERTHREAD_MASK
)
{
ret
=
PthreadGetCputime
(
clockID
,
tp
);
}
else
{
ret
=
ProcessGetCputime
(
clockID
,
tp
);
}
return
ret
;
}
int
clock_gettime
(
clockid_t
clockID
,
struct
timespec
*
tp
)
{
UINT32
intSave
;
struct
timespec64
tmp
=
{
0
};
struct
timespec64
hwTime
=
{
0
};
int
ret
;
if
(
(
clockID
>
MAX_CLOCKS
)
||
(
clockID
<
CLOCK_REALTIME
)
)
{
if
(
clockID
>
MAX_CLOCKS
)
{
goto
ERROUT
;
}
...
...
@@ -497,7 +568,14 @@ int clock_gettime(clockid_t clockID, struct timespec *tp)
case
CLOCK_TAI
:
TIME_RETURN
(
ENOTSUP
);
default:
goto
ERROUT
;
{
#ifdef LOSCFG_KERNEL_CPUP
ret
=
GetCputime
(
clockID
,
tp
);
TIME_RETURN
(
-
ret
);
#else
TIME_RETURN
(
EINVAL
);
#endif
}
}
return
0
;
...
...
@@ -506,8 +584,45 @@ ERROUT:
TIME_RETURN
(
EINVAL
);
}
static
int
CheckClock
(
const
clockid_t
clockID
)
{
int
error
=
0
;
const
pid_t
pid
=
((
pid_t
)
~
((
clockID
)
>>
CPUCLOCK_ID_OFFSET
));
if
(
!
((
UINT32
)
clockID
&
CPUCLOCK_PERTHREAD_MASK
))
{
LosProcessCB
*
spcb
=
NULL
;
if
(
OsProcessIDUserCheckInvalid
(
pid
)
||
pid
<
0
)
{
return
-
EINVAL
;
}
spcb
=
OS_PCB_FROM_PID
(
pid
);
if
(
OsProcessIsUnused
(
spcb
))
{
error
=
-
EINVAL
;
}
}
else
{
error
=
-
EINVAL
;
}
return
error
;
}
static
int
CpuClockGetres
(
const
clockid_t
clockID
,
struct
timespec
*
tp
)
{
if
(
clockID
>
0
)
{
return
-
EINVAL
;
}
int
error
=
CheckClock
(
clockID
);
if
(
!
error
)
{
error
=
ProcessGetCputime
(
clockID
,
tp
);
}
return
error
;
}
int
clock_getres
(
clockid_t
clockID
,
struct
timespec
*
tp
)
{
int
ret
;
if
(
tp
==
NULL
)
{
TIME_RETURN
(
EINVAL
);
}
...
...
@@ -536,7 +651,14 @@ int clock_getres(clockid_t clockID, struct timespec *tp)
case
CLOCK_TAI
:
TIME_RETURN
(
ENOTSUP
);
default:
#ifdef LOSCFG_KERNEL_CPUP
{
ret
=
CpuClockGetres
(
clockID
,
tp
);
TIME_RETURN
(
-
ret
);
}
#else
TIME_RETURN
(
EINVAL
);
#endif
}
TIME_RETURN
(
0
);
...
...
testsuites/unittest/posix/pthread/posix_pthread_test.cpp
浏览文件 @
d6323564
...
...
@@ -327,6 +327,17 @@ HWTEST_F(PosixPthreadTest, ItPosixPthread022, TestSize.Level0)
ItPosixPthread022
();
// pthread_cancel
}
/* *
* @tc.name: IT_POSIX_PTHREAD_203
* @tc.desc: function for pthread concurrency
* @tc.type: FUNC
* @tc.require: AR000EEMQ9
*/
HWTEST_F
(
PosixPthreadTest
,
ItPosixPthread203
,
TestSize
.
Level0
)
{
ItPosixPthread203
();
}
#endif
#if defined(LOSCFG_USER_TEST_FULL)
...
...
testsuites/unittest/process/mutex/process_mutex_test.cpp
浏览文件 @
d6323564
...
...
@@ -293,5 +293,38 @@ HWTEST_F(ProcessMutexTest, ItTestPthreadMutex022, TestSize.Level0)
{
ItTestPthreadMutex022
();
}
/* *
* @tc.name: it_test_pthread_mutex_023
* @tc.desc: function for test mutexattr robust
* @tc.type: FUNC
* @tc.require: AR000E0QAB
*/
HWTEST_F
(
ProcessMutexTest
,
ItTestPthreadMutex023
,
TestSize
.
Level0
)
{
ItTestPthreadMutex023
();
}
/* *
* @tc.name: it_test_pthread_mutex_024
* @tc.desc: function for test mutexattr robust:error return value
* @tc.type: FUNC
* @tc.require: AR000E0QAB
*/
HWTEST_F
(
ProcessMutexTest
,
ItTestPthreadMutex024
,
TestSize
.
Level0
)
{
ItTestPthreadMutex024
();
}
/* *
* @tc.name: it_test_pthread_mutex_025
* @tc.desc: test mutexattr robust:robustness product deadlock is not set
* @tc.type: FUNC
* @tc.require: AR000E0QAB
*/
HWTEST_F
(
ProcessMutexTest
,
ItTestPthreadMutex025
,
TestSize
.
Level0
)
{
ItTestPthreadMutex025
();
}
#endif
}
// namespace OHOS
testsuites/unittest/time/clock/time_clock_test.cpp
浏览文件 @
d6323564
...
...
@@ -147,5 +147,27 @@ HWTEST_F(TimeClockTest, ClockTest010, TestSize.Level0)
ClockTest010
();
}
/* *
* @tc.name: ClockTest011
* @tc.desc: test pthread_getcpuclockid:get pthread time
* @tc.type: FUNC
* @tc.require: AR000E0QAB
*/
HWTEST_F
(
TimeClockTest
,
ClockTest011
,
TestSize
.
Level0
)
{
ClockTest011
();
}
/* *
* @tc.name: ClockTest012
* @tc.desc: test clock_getcpuclockid:get process time
* @tc.type: FUNC
* @tc.require: AR000E0QAB
*/
HWTEST_F
(
TimeClockTest
,
ClockTest012
,
TestSize
.
Level0
)
{
ClockTest012
();
}
#endif
}
// namespace OHOS
testsuites/unittest/time/timer/time_timer_test.cpp
浏览文件 @
d6323564
...
...
@@ -84,8 +84,29 @@ HWTEST_F(TimeTimerTest, TimerTest003, TestSize.Level0)
*/
/*HWTEST_F(TimeTimerTest, TimerTest004, TestSize.Level0)
{
TimerTest004(); //
bug
: musl sigaction handler have only one param.
TimerTest004(); //
TODO
: musl sigaction handler have only one param.
}*/
/* *
* @tc.name: TIME_TEST_TZSET_001
* @tc.desc: function for TIME_TEST_TZSET_001
* @tc.type: FUNC
* @tc.require: AR000EEMQ9
*/
HWTEST_F
(
TimeTimerTest
,
TIME_TEST_TZSET_001
,
TestSize
.
Level0
)
{
TIME_TEST_TZSET_001
();
}
/* *
* @tc.name: TIME_TEST_TZSET_002
* @tc.desc: function for TimeTimerTest
* @tc.type: FUNC
* @tc.require: AR000EEMQ9
*/
HWTEST_F
(
TimeTimerTest
,
TIME_TEST_TZSET_002
,
TestSize
.
Level0
)
{
TIME_TEST_TZSET_002
();
}
#endif
}
// namespace OHOS
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录